package com.xj.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/**
 * @author xujiang
 * @date 2021/2/17 17:39
 */
@Aspect
public class LogAspects {

    /**
     * 除后去公共的切入点表达式
     * 1、本类引用
     * 2、其他切面一你用
     */
    @Pointcut("execution(public int com.xj.aop.MathCalculator.*(..))")
    public void pointCut() {

    }

    /**
     * 目标方法之前切入
     */
    @Before("pointCut()")
    public void logStart(JoinPoint joinPoint ) {
        System.out.println(joinPoint.getSignature().getName() + "除法运行。。。参数列表是： {" + Arrays.asList(joinPoint.getArgs())+ "}");
    }

    /**
     * 目标方法结束之后
     */
    @After("pointCut()")
    public void logEnd() {
        System.out.println("除法结束。。。");
    }


    @AfterReturning(value = "pointCut()", returning = "result")
    public void logReturn(Object result) {
        System.out.println("除法正常返回。。。运行结果： {" + result + "}");
    }

    /**
     * JoinPoint一定要放到参数表的第一位
     * @param joinPoint
     * @param exception
     */
    @AfterThrowing(value = "pointCut()", throwing = "exception")
    public void logException(JoinPoint joinPoint, Exception exception) {
        System.out.println(joinPoint.getSignature().getName() + "除法异常。。。异常信息： {" + exception + "}");
    }
//    public void logStart() {
//        System.out.println("除法运行。。。参数列表是： {}");
//    }
//    public void logStart() {
//        System.out.println("除法运行。。。参数列表是： {}");
//    }
}
